package edu.ucue.ECU.dao;

import edu.ucue.ECU.exp.ActualizarDatosPersonaException;
import edu.ucue.ECU.exp.BuscarDatosPersonaException;
import edu.ucue.ECU.exp.EliminarDatosPersonaException;
import edu.ucue.ECU.exp.GuardarDatosPersonaException;
import edu.ucue.ECU.ngc.Persona;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class PersonaDB {

    public void grabar(Persona miPersona) throws GuardarDatosPersonaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            boolean resultado = stmt.execute("insert into \"Persona\" values('" + miPersona.getCedula() + "','" + miPersona.getNombre() + "')");
            var.close();
        } catch (SQLException ex) {
            throw new GuardarDatosPersonaException("Se produjo un error inesperado al guardar los datos de persona");
        }
    }
    
    public void modificar(Persona miPersona) throws ActualizarDatosPersonaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="update \"Persona\" set nombre='" + miPersona.getNombre() + "' where \"CI\"='" + miPersona.getCedula() + "'";
            stmt.executeUpdate(consulta);
            var.close();
        } catch (SQLException ex) {
            throw new ActualizarDatosPersonaException("Se produjo un error inesperado al actualizar los datos de persona");
        }
    }
    
    public void eliminar(Persona miPersona) throws EliminarDatosPersonaException {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="delete \"Persona\" where \"CI\"='" + miPersona.getCedula() + "'";
            stmt.executeUpdate(consulta);
            var.close();
        } catch (SQLException ex) {
            throw new EliminarDatosPersonaException("Se produjo un error inesperado al eliminar los datos de persona");
        }
    }
    public Persona buscar(Persona miPersona) throws BuscarDatosPersonaException  {
        try {
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            String consulta="select * from only \"Persona\" where \"CI\" ='" + miPersona.getCedula() + "'";
            System.out.println(consulta);
            ResultSet resultado = stmt.executeQuery(consulta);
            if (resultado.next()) {
                miPersona.setNombre(resultado.getString("nombre"));
                var.close();
                return miPersona;
            }
            var.close();
            return null;
        } catch (SQLException ex) {
            throw new BuscarDatosPersonaException("Se produjo un error inesperado al buscar los datos de persona");
        }
    }
    
      public ArrayList listarPersonas(String sql) throws BuscarDatosPersonaException {
        try {
            ArrayList todos=new ArrayList();
            Conexion data=Conexion.getInstance();
            Connection var=data.getConexion();
            Statement stmt = var.createStatement();
            ResultSet resultado = stmt.executeQuery("select * from \"Persona\"");
            while (resultado.next()) {
                Persona miPersona = new Persona();
                miPersona.setCedula(resultado.getString("CI"));
                miPersona.setNombre(resultado.getString("Nombre"));
                todos.add(miPersona);
            }var.close();
            return todos;
        } catch (SQLException ex) {
            throw new BuscarDatosPersonaException("Se produjo un error inesperado al buscar los datos de personas");
        }
    }

}
